package com.foreveross.proxyip.infra.utils.param;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.foreveross.proxyip.infra.utils.DateUtils;
import com.foreveross.proxyip.infra.utils.StringUtils;
/**
 * 获得时间类型参数值
 * @author xiangsf
 * @version $Revision$ $Date$
 * @since 0.5
 */
public class ParamDateUtils {
	/**
     * 获得页面请求中的时间参数值
     * <p>如果获得的值为空，则返回null</p>
     * @param request
     * @param name 参数名称
     * @return 时间date对象
     */
    public static Date getParameter(HttpServletRequest request, String name){
    	return getParameter(request, name, DateUtils.DATE_FMT_CN_SLASH_YMD_HMS);
    }   
    /**
     * 获得指定格式的页面请求中的日期值
     * @param request
     * @param name 日期格式定义
     * @param format 日期格式定义,参考com.shengdai.global.util.DateUtils中定义
     * @return 日期Date对象
     * @see com.shengdai.global.util.DateUtils中日期格式定义
     */
    public static Date getParameter(HttpServletRequest request, String name, DateFormat format){
    	String tmp = request.getParameter(name);
    	if(StringUtils.isNotEmpty(tmp)){
    		try{
    			if(format == null) return DateUtils.DATE_FMT_CN_SLASH_YMD_HMS.parse(tmp);
        		return format.parse(tmp);
        	}catch(Exception e){
        		return null;
        	} 
    	}
    	tmp = null;
    	format = null;
    	return null;
    }
    /**
     * 获得指定格式的页面请求中的日期值
     * <p>当传入格式为空时，默认以yyyy-MM-dd HH:mm:ss格式转换</p>
     * @param request
     * @param name 日期格式定义
     * @param pattern 日期格式定义,如：yyyy-MM-dd HH:mm:ss
     * @return 日期Date对象
     * @see com.shengdai.global.util.DateUtils中日期格式定义
     * @see getParameter(request, name)
     */
    public static Date getParameter(HttpServletRequest request, String name, String pattern){
    	if(StringUtils.isEmpty(pattern))
    		return getParameter(request, name);
    	return getParameter(request, name, new SimpleDateFormat(pattern, Locale.CHINA));
    }
   
    /**
     * 获得页面请求中的日期值
     * @param request
     * @param name 参数名称
     * @return 
     */
    public static Date getParameter(Map<String, String> params, String name,DateFormat format){
    	String temp = params.get(name);
    	if(StringUtils.isNotEmpty(temp)){
    		try{
    			if(format == null) return DateUtils.DATE_FMT_CN_SLASH_YMD_HMS.parse(temp);
        		return format.parse(temp);
        	}catch(Exception e){
        		return null;
        	} 
    	}
    	temp = null;
    	format = null;
    	return null;
    }
    /**
     * 获得页面请求中的日期值集合
     * <p>返回数组中未过滤掉为空的值
     * @param request
     * @param name 参数名称
     * @return 返回数组
     */
    public static Date[] getParameters(HttpServletRequest request, String name){
    	List<Date> values = getListParameters(request, name) ;
    	return (Date[])values.toArray(new Date[]{});
    }
    /**
     * 获得页面请求中的日期值集合
     * <p>返回数组中未过滤掉为空的值
     * @param request
     * @param name 参数名称
     * @return 返回日期型list集合
     */
    public static List<Date> getListParameters(HttpServletRequest request, String name){
    	return getListParameters(request, name, DateUtils.DATE_FMT_CN_SLASH_YMD_HMS);
    }
    /**
     * 获得页面请求中的日期值集合
     * <p>返回数组中未过滤掉为空的值
     * @param request
     * @param name 参数名称
     * @param format 日期格式定义,参考com.shengdai.global.util.DateUtils中定义
     * @return 返回日期型list集合
     */
    public static List<Date> getListParameters(HttpServletRequest request, String name, DateFormat format){
    	List<Date> values = new ArrayList<Date>();
    	String[] temp = request.getParameterValues(name);
    	if(temp != null && temp.length > 0){
    		for(int i = 0 ;i < temp.length; i++){
    			if(StringUtils.isNotEmpty(temp[i])){
    				try {
						values.add(format == null ? DateUtils.DATE_FMT_CN_SLASH_YMD_HMS.parse(temp[i]) : format.parse(temp[i]));
					} catch (ParseException e) {
						values.add(null);
					}
    	    	}else{
    	    		values.add(null);
    	    	}
    		}
    	}
    	return values;
    }
    /**
     * 获得页面请求中的日期值集合
     * <p>返回数组中未过滤掉为空的值
     * @param request
     * @param name 参数名称
     * @param pattern 日期格式,形如：yyyy-MM-dd HH:mm:ss
     * @return 返回日期型list集合
     */
    public static List<Date> getListParameters(HttpServletRequest request, String name, String pattern){
    	if(StringUtils.isEmpty(pattern))
    		return getListParameters(request, name);
    	return getListParameters(request, name, new SimpleDateFormat(pattern, Locale.CHINA));
    }
    /**
     * 获得页面请求中的参数以指定字符串开头的日期值集合
     * @param request
     * @param namePrefix 参数名称前缀
     * @param format 日期格式定义,参考com.shengdai.global.util.DateUtils中定义
     * @return 
     */
    public static Date[] getParametersStartWith(HttpServletRequest request, String namePrefix, DateFormat format){
    	List<Date> values = getListParametersStartWith(request,namePrefix,format);
    	return (Date[])values.toArray(new Date[]{});
    }
    /**
     * 获得页面请求中的参数以指定字符串开头的日期值集合
     * @param request
     * @param namePrefix 参数名称前缀
     * @param format 日期格式定义,参考com.shengdai.global.util.DateUtils中定义
     * @return 
     */
    public static Date[] getParametersStartWith(HttpServletRequest request, String namePrefix, String pattern){
    	List<Date> values = getListParametersStartWith(request,namePrefix, pattern);
    	return (Date[])values.toArray(new Date[]{});
    }
    /**
     * 获得页面请求中的参数以指定字符串开头的日期值集合
     * <p>以默认的yyyy-MM-dd HH:mm:ss格式化字符串为日期
     * @param request
     * @param namePrefix 参数名称前缀
     * @return 
     */
    public static Date[] getParametersStartWith(HttpServletRequest request, String namePrefix){
    	List<Date> values = getListParametersStartWith(request,namePrefix, DateUtils.DATE_FMT_CN_SLASH_YMD_HMS);
    	return (Date[])values.toArray(new Date[]{});
   }
    /**
     * 获得页面请求中的参数以指定字符串开头的日期值集合
     * @param request
     * @param namePrefix 参数名称前缀
     * @param format 日期格式定义,参考com.shengdai.global.util.DateUtils中定义
     * @return 
     */
    public static List<Date> getListParametersStartWith(HttpServletRequest request, String namePrefix, DateFormat format){
    	List<Date> values = new ArrayList<Date>();
    	Map<String,String[]> paras = request.getParameterMap();
    	String tempKey = null;
    	String[] temp = null;
    	for(Iterator<String> names = paras.keySet().iterator(); names.hasNext();){
    		tempKey = names.next();
    		if(tempKey.startsWith(namePrefix)){//以指定的字符串开头
    			temp = paras.get(tempKey);
    			if(temp != null && temp.length > 0){
    				try {
    					values.add(format == null ? DateUtils.DATE_FMT_CN_SLASH_YMD_HMS.parse(temp[0]) : format.parse(temp[0]));
					} catch (ParseException e) {
						values.add(null);
					}
    			}else{
    				values.add(null);
    			}
    		}
    	}
    	return values;
    }
    /**
     * 获得页面请求中的参数以指定字符串开头的日期值集合
     * @param request
     * @param namePrefix 参数名称前缀
     * @param format 日期格式定义,参考com.shengdai.global.util.DateUtils中定义
     * @return 
     */
    public static List<Date> getListParametersStartWith(HttpServletRequest request, String namePrefix, String pattern){
    	if(StringUtils.isEmpty(pattern))
    		return getListParametersStartWith(request, namePrefix);
    	return getListParametersStartWith(request,  namePrefix,  new SimpleDateFormat(pattern, Locale.CHINA));
    }
    /**
     * 获得页面请求中的参数以指定字符串开头的日期值集合
     * <p>以默认的yyyy-MM-dd HH:mm:ss格式化字符串为日期
     * @param request
     * @param namePrefix 参数名称前缀
     * @return 
     */
    public static List<Date> getListParametersStartWith(HttpServletRequest request, String namePrefix){
    	return getListParametersStartWith(request, namePrefix, DateUtils.DATE_FMT_CN_SLASH_YMD_HMS);
    }

    
}
